package com.jerry.frame.rpc.registry;

import java.util.Collection;

/**
 * Created by zjh on 2017/8/7.
 */
//注册管理服务器，服务端和客户端都需要通过这个类去进行注册的相关操作
public interface RegistryService extends Registry {

    //注册服务
    void register(RegistryMeta meta);

    //取消注册服务
    void unregister(RegistryMeta registryMeta);

    //订阅服务
    void subscribe(RegistryMeta.ServiceMeta serviceMeta);

    //查询注册
    Collection<RegistryMeta> lookup(RegistryMeta.ServiceMeta serviceMeta);

    //判断注册服务管理器是否被关闭
    boolean isShutdown();

    //关闭注册服务管理器
    void shutdownGracefully();

    enum RegistryType {
        DEFAULT("default"), ZOOKEEPER("zookeeper");
        private String value;

        public String getValue() {
            return value;
        }


        RegistryType(String vaule) {
            this.value = value;
        }

        ;

        public static RegistryType parse(String name) {
            //values获取枚举类型所有的值
            //s.name()获取值的名称。
            for (RegistryType s : values()) {
                if (s.name().equalsIgnoreCase(name)) {
                    return s;
                }
            }
            return null;

        }
    }
}
